import axios from "axios";
import { ElLoading, ElMessage } from "element-plus";
import { base_url } from "../http/base.js";
import router from "../router";
let loading;

function startLoading() {
  loading = ElLoading.service({
    lock: true,
    text: "loading....",
    background: "rgba(0, 0, 0, 0.7)",
  });
}

function endLoading() {
  loading.close();
}

// axios.get("./config.json").then((res) => {
//     // 跨域站点解决方案
//     // 把后台域名作为属性挂载到VUE属性上去。
//     //   Vue.prototype.base_url = res.data.base_url;
//     vue.config.globalProperties.base_url = res.data.base_url;
//   });

// http request拦截器 添加一个请求拦截器
axios.interceptors.request.use(
  function (config) {
    startLoading();
    config.baseURL = base_url.url;
    config.withCredentials = true; // 允许携带token ,这个是解决跨域产生的相关问题
    config.timeout = 600000;

    // Do something before request is sent
    //window.localStorage.getItem("accessToken") 获取token的value

    if (config.url.indexOf("/uservue/login") > -1) {
      return config; // 登录接口排除 不需要token
    } else {
      let token = window.localStorage.getItem("token");
      if (token) {
        //将token放到请求头发送给服务器,将tokenkey放在请求头中
        config.headers.token = token;
        //也可以这种写法
        // config.headers['token'] = token;
        return config;
      } else {
        // 直接输入地址 ，没有经过认证
        endLoading();
        router.replace({
          path: "/login",

          // query: {redirect: router.currentRoute.fullPath}
        });
      }
    }
  },
  function (error) {
    // Do something with request error
    return Promise.reject(error);
  }
);
// 添加一个响应拦截器
axios.interceptors.response.use(
  function (response) {
    endLoading();
    // Do something with response data
    if (response.status == 200 && response.headers.token) {
      localStorage.setItem("token", response.headers.token); //存token
      return response;
    }
  },
  function (error) {
    ElMessage.error(error.response.data);
    endLoading();
    // Do something with response error
    if (error.response) {
      switch (error.response.status) {
        // 返回401，清除token信息并跳转到登录页面
        case 401:
          localStorage.removeItem("token");
          router.replace({
            path: "/login",
            //登录成功后跳入浏览的当前页面
            // query: {redirect: router.currentRoute.fullPath}
          });
      }
      // 返回接口返回的错误信息
      return Promise.reject(error.response.data);
    }
    return Promise.reject(error);
  }
);

export default axios;
